#!/usr/bin/env python3
"""
libtiff MCP Server

面向 libtiff 图像处理库的命令行操作 MCP 服务器。

提供的 MCP tools：
1. libtiff_compile_test - 编译 libtiff 测试程序并验证编译结果
   - 参数：source_file (str): 要编译的 C 源文件路径
   - 参数：output_name (str): 编译输出的可执行文件名
   - 返回：统一的 JSON 结构，包含编译和验证结果

返回的统一 JSON 结构：
{
  "success": bool,      # 操作是否成功
  "command": str,       # 执行的完整命令
  "exit_code": int,     # 命令退出码
  "stdout": str,        # 标准输出内容
  "stderr": str         # 标准错误内容
}
"""

import subprocess
import os
from typing import Dict, Any
from mcp.server.fastmcp import FastMCP, Context

mcp = FastMCP("libtiff MCP Server")

@mcp.tool()
def libtiff_compile_test(source_file: str, output_name: str = "test") -> Dict[str, Any]:
    """
    编译 libtiff 测试程序并验证编译结果
    
    参数:
        source_file: 要编译的 C 源文件路径
        output_name: 编译输出的可执行文件名，默认为 "test"
    
    返回:
        JSON 结构:
        {
            "success": bool,
            "command": str, 
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    try:
        # 编译命令
        compile_cmd = ["gcc", source_file, "-o", output_name, "-ltiff"]
        compile_result = subprocess.run(compile_cmd, capture_output=True, text=True, timeout=30)
        
        # 验证编译结果
        verify_cmd = ["test", "-e", output_name]
        verify_result = subprocess.run(verify_cmd, capture_output=True, text=True, timeout=10)
        
        # 构建返回结果
        success = compile_result.returncode == 0 and verify_result.returncode == 0
        
        return {
            "success": success,
            "command": f"compile: {' '.join(compile_cmd)}; verify: {' '.join(verify_cmd)}",
            "exit_code": compile_result.returncode if compile_result.returncode != 0 else verify_result.returncode,
            "stdout": compile_result.stdout + "\n" + verify_result.stdout,
            "stderr": compile_result.stderr + "\n" + verify_result.stderr
        }
        
    except subprocess.TimeoutExpired:
        return {
            "success": False,
            "command": f"compile: {' '.join(compile_cmd)}; verify: {' '.join(verify_cmd)}",
            "exit_code": -1,
            "stdout": "",
            "stderr": "Command execution timed out"
        }
    except Exception as e:
        return {
            "success": False,
            "command": f"compile: {' '.join(compile_cmd)}; verify: {' '.join(verify_cmd)}",
            "exit_code": -1,
            "stdout": "",
            "stderr": f"Error: {str(e)}"
        }

if __name__ == "__main__":
    mcp.run()